"""
    方法 / 属性：
        1、name：当前进程实例名，默认 Process-N
        2、pid：当前进程对象的 PID 值
        3、is_alive：进程是否执行完，没执行完（真在执行中），结果为 True，否则为 False
        4、join(timeout) 等待结束或等待timeout秒
        5、start() 启动进程
        6、run() 如果没有指定 target 参数，则启动进程后，会调用父类中的 run 方法
        7、terminate() 强制终止进程

"""
import os
import time
from multiprocessing import Process


# 函数方式创建子进程
def sub_process(name):
    print(f'子进程 PID：{os.getpid()}，父进程的 PID：{os.getppid()},----------{name}')


def sub_process2(name):
    print(f'子进程 PID：{os.getpid()}，父进程的 PID：{os.getppid()},----------{name}')

    time.sleep(1)


if __name__ == '__main__':
    # 主进程
    print('父进程开始执行')
    for i in range(5):
        # 创建第一个子进程
        p1 = Process(target=sub_process, args=('htl',))
        # 创建第二个子进程
        p2 = Process(target=sub_process2, args=('18',))
        # 调用start() 启动子进程
        p1.start()
        p2.start()
        print(p1.name, '是否执行中：', p1.is_alive())
        print(p2.name, '是否执行中：', p2.is_alive())

        print(p1.name, 'pid是：', p1.pid)
        print(p2.name, 'pid是：', p2.pid)

        p1.join()   # 主进程要等待 p1 执行结束， 阻塞的主进程
        p2.join()   # 主进程要等待 p2 执行结束

        print(p1.name, '是否执行中：', p1.is_alive())
        print(p2.name, '是否执行中：', p2.is_alive())

    print('父进程执行完毕')
